<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>SectionModel.swift - Slather</title>
<link href="slather.css" media="all" rel="stylesheet">
</head>
<body>
<header><div class="row"><a href="index.html"><img src="logo.jpg" alt="Slather logo"></a></div></header><div class="row"><div id="reports">
<h2 class="cov_title">
<span>Coverage for "SectionModel.swift" : </span><span class="cov_high">85.45%</span>
</h2>
<h4 class="cov_subtitle">(94 of 110 relevant lines covered)</h4>
<h4 class="cov_filepath">ChatLayout/Classes/Core/Model/SectionModel.swift</h4>
<table class="source_code">
<tr class="never">
<td class="num">1</td>
<td class="src"><pre><code class="objc">//</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">2</td>
<td class="src"><pre><code class="objc">// ChatLayout</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">3</td>
<td class="src"><pre><code class="objc">// SectionModel.swift</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">4</td>
<td class="src"><pre><code class="objc">// https://github.com/ekazaev/ChatLayout</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">5</td>
<td class="src"><pre><code class="objc">//</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">6</td>
<td class="src"><pre><code class="objc">// Created by Eugene Kazaev in 2020-2023.</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">7</td>
<td class="src"><pre><code class="objc">// Distributed under the MIT license.</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">8</td>
<td class="src"><pre><code class="objc">//</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">9</td>
<td class="src"><pre><code class="objc">// Become a sponsor:</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">10</td>
<td class="src"><pre><code class="objc">// https://github.com/sponsors/ekazaev</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">11</td>
<td class="src"><pre><code class="objc">//</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">12</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">13</td>
<td class="src"><pre><code class="objc">import Foundation</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">14</td>
<td class="src"><pre><code class="objc">import UIKit</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">15</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">16</td>
<td class="src"><pre><code class="objc">struct SectionModel&lt;Layout: ChatLayoutRepresentation&gt; {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">17</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">18</td>
<td class="src"><pre><code class="objc">    let id: UUID</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">19</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">20</td>
<td class="src"><pre><code class="objc">    private(set) var header: ItemModel?</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">21</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">22</td>
<td class="src"><pre><code class="objc">    private(set) var footer: ItemModel?</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">23</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">24</td>
<td class="src"><pre><code class="objc">    private(set) var items: ContiguousArray&lt;ItemModel&gt;</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">25</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">26</td>
<td class="src"><pre><code class="objc">    var offsetY: CGFloat = 0</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">27</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">28</td>
<td class="src"><pre><code class="objc">    private unowned var collectionLayout: Layout</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">29</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">30</td>
<td class="src"><pre><code class="objc">    var frame: CGRect {</code></pre></td>
<td class="coverage">10x</td>
</tr>
<tr class="covered">
<td class="num">31</td>
<td class="src"><pre><code class="objc">        let additionalInsets = collectionLayout.settings.additionalInsets</code></pre></td>
<td class="coverage">10x</td>
</tr>
<tr class="covered">
<td class="num">32</td>
<td class="src"><pre><code class="objc">        return CGRect(x: 0,</code></pre></td>
<td class="coverage">10x</td>
</tr>
<tr class="covered">
<td class="num">33</td>
<td class="src"><pre><code class="objc">                      y: offsetY,</code></pre></td>
<td class="coverage">10x</td>
</tr>
<tr class="covered">
<td class="num">34</td>
<td class="src"><pre><code class="objc">                      width: collectionLayout.visibleBounds.width - additionalInsets.left - additionalInsets.right,</code></pre></td>
<td class="coverage">10x</td>
</tr>
<tr class="covered">
<td class="num">35</td>
<td class="src"><pre><code class="objc">                      height: height)</code></pre></td>
<td class="coverage">10x</td>
</tr>
<tr class="covered">
<td class="num">36</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">10x</td>
</tr>
<tr class="never">
<td class="num">37</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">38</td>
<td class="src"><pre><code class="objc">    var height: CGFloat {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">39</td>
<td class="src"><pre><code class="objc">        if let footer {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">40</td>
<td class="src"><pre><code class="objc">            return footer.frame.maxY</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">41</td>
<td class="src"><pre><code class="objc">        } else {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">42</td>
<td class="src"><pre><code class="objc">            guard let lastItem = items.last else {</code></pre></td>
<td class="coverage">2x</td>
</tr>
<tr class="missed">
<td class="num">43</td>
<td class="src"><pre><code class="objc">                return header?.frame.maxY ?? .zero</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="covered">
<td class="num">44</td>
<td class="src"><pre><code class="objc">            }</code></pre></td>
<td class="coverage">2x</td>
</tr>
<tr class="covered">
<td class="num">45</td>
<td class="src"><pre><code class="objc">            return lastItem.frame.maxY</code></pre></td>
<td class="coverage">2x</td>
</tr>
<tr class="covered">
<td class="num">46</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">2x</td>
</tr>
<tr class="missed">
<td class="num">47</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="never">
<td class="num">48</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">49</td>
<td class="src"><pre><code class="objc">    var locationHeight: CGFloat {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">50</td>
<td class="src"><pre><code class="objc">        offsetY + height</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">51</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">52</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">53</td>
<td class="src"><pre><code class="objc">    init(id: UUID = UUID(),</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">54</td>
<td class="src"><pre><code class="objc">         header: ItemModel?,</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">55</td>
<td class="src"><pre><code class="objc">         footer: ItemModel?,</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">56</td>
<td class="src"><pre><code class="objc">         items: ContiguousArray&lt;ItemModel&gt; = [],</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">57</td>
<td class="src"><pre><code class="objc">         collectionLayout: Layout) {</code></pre></td>
<td class="coverage">60x</td>
</tr>
<tr class="covered">
<td class="num">58</td>
<td class="src"><pre><code class="objc">        self.id = id</code></pre></td>
<td class="coverage">60x</td>
</tr>
<tr class="covered">
<td class="num">59</td>
<td class="src"><pre><code class="objc">        self.items = items</code></pre></td>
<td class="coverage">60x</td>
</tr>
<tr class="covered">
<td class="num">60</td>
<td class="src"><pre><code class="objc">        self.collectionLayout = collectionLayout</code></pre></td>
<td class="coverage">60x</td>
</tr>
<tr class="covered">
<td class="num">61</td>
<td class="src"><pre><code class="objc">        self.header = header</code></pre></td>
<td class="coverage">60x</td>
</tr>
<tr class="covered">
<td class="num">62</td>
<td class="src"><pre><code class="objc">        self.footer = footer</code></pre></td>
<td class="coverage">60x</td>
</tr>
<tr class="covered">
<td class="num">63</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">60x</td>
</tr>
<tr class="never">
<td class="num">64</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">65</td>
<td class="src"><pre><code class="objc">    mutating func assembleLayout() {</code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="covered">
<td class="num">66</td>
<td class="src"><pre><code class="objc">        var offsetY: CGFloat = 0</code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="covered">
<td class="num">67</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="covered">
<td class="num">68</td>
<td class="src"><pre><code class="objc">        if header != nil {</code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="covered">
<td class="num">69</td>
<td class="src"><pre><code class="objc">            header?.offsetY = 0</code></pre></td>
<td class="coverage">115x</td>
</tr>
<tr class="covered">
<td class="num">70</td>
<td class="src"><pre><code class="objc">            offsetY += header?.frame.height ?? 0</code></pre></td>
<td class="coverage">115x</td>
</tr>
<tr class="covered">
<td class="num">71</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="covered">
<td class="num">72</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="covered">
<td class="num">73</td>
<td class="src"><pre><code class="objc">        items.withUnsafeMutableBufferPointer { directlyMutableItems in</code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="never">
<td class="num">74</td>
<td class="src"><pre><code class="objc">            for rowIndex in 0..&lt;directlyMutableItems.count {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">75</td>
<td class="src"><pre><code class="objc">                directlyMutableItems[rowIndex].offsetY = offsetY</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">76</td>
<td class="src"><pre><code class="objc">                offsetY += directlyMutableItems[rowIndex].size.height + collectionLayout.settings.interItemSpacing</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">77</td>
<td class="src"><pre><code class="objc">            }</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">78</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="covered">
<td class="num">79</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="covered">
<td class="num">80</td>
<td class="src"><pre><code class="objc">        if footer != nil {</code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="covered">
<td class="num">81</td>
<td class="src"><pre><code class="objc">            footer?.offsetY = offsetY</code></pre></td>
<td class="coverage">117x</td>
</tr>
<tr class="covered">
<td class="num">82</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="covered">
<td class="num">83</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">118x</td>
</tr>
<tr class="never">
<td class="num">84</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">85</td>
<td class="src"><pre><code class="objc">    // MARK: To use when its is important to make the correct insertion</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">86</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">87</td>
<td class="src"><pre><code class="objc">    mutating func setAndAssemble(header: ItemModel) {</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">88</td>
<td class="src"><pre><code class="objc">        guard let oldHeader = self.header else {</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="missed">
<td class="num">89</td>
<td class="src"><pre><code class="objc">            self.header = header</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">90</td>
<td class="src"><pre><code class="objc">            offsetEverything(below: -1, by: header.size.height)</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">91</td>
<td class="src"><pre><code class="objc">            return</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="covered">
<td class="num">92</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">93</td>
<td class="src"><pre><code class="objc">        #if DEBUG</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">94</td>
<td class="src"><pre><code class="objc">        if header.id != oldHeader.id {</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="missed">
<td class="num">95</td>
<td class="src"><pre><code class="objc">            assertionFailure("Internal inconsistency.")</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="covered">
<td class="num">96</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">97</td>
<td class="src"><pre><code class="objc">        #endif</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">98</td>
<td class="src"><pre><code class="objc">        self.header = header</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">99</td>
<td class="src"><pre><code class="objc">        let heightDiff = header.size.height - oldHeader.size.height</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">100</td>
<td class="src"><pre><code class="objc">        offsetEverything(below: -1, by: heightDiff)</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">101</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="never">
<td class="num">102</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">103</td>
<td class="src"><pre><code class="objc">    mutating func setAndAssemble(item: ItemModel, at index: Int) {</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">104</td>
<td class="src"><pre><code class="objc">        guard index &lt; items.count else {</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="missed">
<td class="num">105</td>
<td class="src"><pre><code class="objc">            assertionFailure("Incorrect item index.")</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">106</td>
<td class="src"><pre><code class="objc">            return</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="covered">
<td class="num">107</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">108</td>
<td class="src"><pre><code class="objc">        let oldItem = items[index]</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">109</td>
<td class="src"><pre><code class="objc">        #if DEBUG</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">110</td>
<td class="src"><pre><code class="objc">        if item.id != oldItem.id {</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="missed">
<td class="num">111</td>
<td class="src"><pre><code class="objc">            assertionFailure("Internal inconsistency.")</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="covered">
<td class="num">112</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">113</td>
<td class="src"><pre><code class="objc">        #endif</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">114</td>
<td class="src"><pre><code class="objc">        items[index] = item</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">115</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">116</td>
<td class="src"><pre><code class="objc">        let heightDiff = item.size.height - oldItem.size.height</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">117</td>
<td class="src"><pre><code class="objc">        offsetEverything(below: index, by: heightDiff)</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">118</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="never">
<td class="num">119</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">120</td>
<td class="src"><pre><code class="objc">    mutating func setAndAssemble(footer: ItemModel) {</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">121</td>
<td class="src"><pre><code class="objc">        #if DEBUG</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">122</td>
<td class="src"><pre><code class="objc">        if let oldFooter = self.footer,</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">123</td>
<td class="src"><pre><code class="objc">           footer.id != oldFooter.id {</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="missed">
<td class="num">124</td>
<td class="src"><pre><code class="objc">            assertionFailure("Internal inconsistency.")</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="covered">
<td class="num">125</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">126</td>
<td class="src"><pre><code class="objc">        #endif</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">127</td>
<td class="src"><pre><code class="objc">        self.footer = footer</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="covered">
<td class="num">128</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">3x</td>
</tr>
<tr class="never">
<td class="num">129</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">130</td>
<td class="src"><pre><code class="objc">    // MARK: Just updaters</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">131</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">132</td>
<td class="src"><pre><code class="objc">    mutating func set(header: ItemModel?) {</code></pre></td>
<td class="coverage">5x</td>
</tr>
<tr class="covered">
<td class="num">133</td>
<td class="src"><pre><code class="objc">        self.header = header</code></pre></td>
<td class="coverage">5x</td>
</tr>
<tr class="covered">
<td class="num">134</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">5x</td>
</tr>
<tr class="never">
<td class="num">135</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">136</td>
<td class="src"><pre><code class="objc">    mutating func set(items: ContiguousArray&lt;ItemModel&gt;) {</code></pre></td>
<td class="coverage">5x</td>
</tr>
<tr class="covered">
<td class="num">137</td>
<td class="src"><pre><code class="objc">        self.items = items</code></pre></td>
<td class="coverage">5x</td>
</tr>
<tr class="covered">
<td class="num">138</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">5x</td>
</tr>
<tr class="never">
<td class="num">139</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">140</td>
<td class="src"><pre><code class="objc">    mutating func set(footer: ItemModel?) {</code></pre></td>
<td class="coverage">5x</td>
</tr>
<tr class="covered">
<td class="num">141</td>
<td class="src"><pre><code class="objc">        guard let _ = self.footer, let _ = footer else {</code></pre></td>
<td class="coverage">5x</td>
</tr>
<tr class="covered">
<td class="num">142</td>
<td class="src"><pre><code class="objc">            self.footer = footer</code></pre></td>
<td class="coverage">1x</td>
</tr>
<tr class="covered">
<td class="num">143</td>
<td class="src"><pre><code class="objc">            return</code></pre></td>
<td class="coverage">1x</td>
</tr>
<tr class="covered">
<td class="num">144</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">4x</td>
</tr>
<tr class="covered">
<td class="num">145</td>
<td class="src"><pre><code class="objc">        self.footer = footer</code></pre></td>
<td class="coverage">4x</td>
</tr>
<tr class="covered">
<td class="num">146</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">4x</td>
</tr>
<tr class="never">
<td class="num">147</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">148</td>
<td class="src"><pre><code class="objc">    private mutating func offsetEverything(below index: Int, by heightDiff: CGFloat) {</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">149</td>
<td class="src"><pre><code class="objc">        guard heightDiff != 0 else {</code></pre></td>
<td class="coverage">10000x</td>
</tr>
<tr class="covered">
<td class="num">150</td>
<td class="src"><pre><code class="objc">            return</code></pre></td>
<td class="coverage">9000x</td>
</tr>
<tr class="covered">
<td class="num">151</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">9000x</td>
</tr>
<tr class="covered">
<td class="num">152</td>
<td class="src"><pre><code class="objc">        if index &lt; items.count &amp;- 1 {</code></pre></td>
<td class="coverage">1000x</td>
</tr>
<tr class="covered">
<td class="num">153</td>
<td class="src"><pre><code class="objc">            let nextIndex = index &amp;+ 1</code></pre></td>
<td class="coverage">1000x</td>
</tr>
<tr class="covered">
<td class="num">154</td>
<td class="src"><pre><code class="objc">            items.withUnsafeMutableBufferPointer { directlyMutableItems in</code></pre></td>
<td class="coverage">1000x</td>
</tr>
<tr class="never">
<td class="num">155</td>
<td class="src"><pre><code class="objc">                DispatchQueue.concurrentPerform(iterations: directlyMutableItems.count &amp;- nextIndex) { internalIndex in</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">156</td>
<td class="src"><pre><code class="objc">                    directlyMutableItems[internalIndex &amp;+ nextIndex].offsetY += heightDiff</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">157</td>
<td class="src"><pre><code class="objc">                }</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">158</td>
<td class="src"><pre><code class="objc">            }</code></pre></td>
<td class="coverage">1000x</td>
</tr>
<tr class="covered">
<td class="num">159</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">1000x</td>
</tr>
<tr class="covered">
<td class="num">160</td>
<td class="src"><pre><code class="objc">        footer?.offsetY += heightDiff</code></pre></td>
<td class="coverage">1000x</td>
</tr>
<tr class="covered">
<td class="num">161</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">1000x</td>
</tr>
<tr class="never">
<td class="num">162</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">163</td>
<td class="src"><pre><code class="objc">    // MARK: To use only withing process(updateItems:)</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">164</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">165</td>
<td class="src"><pre><code class="objc">    mutating func insert(_ item: ItemModel, at index: Int) {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">166</td>
<td class="src"><pre><code class="objc">        guard index &lt;= items.count else {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="missed">
<td class="num">167</td>
<td class="src"><pre><code class="objc">            assertionFailure("Incorrect item index.")</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">168</td>
<td class="src"><pre><code class="objc">            return</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="never">
<td class="num">169</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">170</td>
<td class="src"><pre><code class="objc">        items.insert(item, at: index)</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">171</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">172</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="covered">
<td class="num">173</td>
<td class="src"><pre><code class="objc">    mutating func replace(_ item: ItemModel, at index: Int) {</code></pre></td>
<td class="coverage">10300x</td>
</tr>
<tr class="covered">
<td class="num">174</td>
<td class="src"><pre><code class="objc">        guard index &lt;= items.count else {</code></pre></td>
<td class="coverage">10300x</td>
</tr>
<tr class="missed">
<td class="num">175</td>
<td class="src"><pre><code class="objc">            assertionFailure("Incorrect item index.")</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">176</td>
<td class="src"><pre><code class="objc">            return</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="covered">
<td class="num">177</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage">10300x</td>
</tr>
<tr class="covered">
<td class="num">178</td>
<td class="src"><pre><code class="objc">        items[index] = item</code></pre></td>
<td class="coverage">10300x</td>
</tr>
<tr class="covered">
<td class="num">179</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage">10300x</td>
</tr>
<tr class="never">
<td class="num">180</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">181</td>
<td class="src"><pre><code class="objc">    mutating func remove(at index: Int) {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">182</td>
<td class="src"><pre><code class="objc">        guard index &lt; items.count else {</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="missed">
<td class="num">183</td>
<td class="src"><pre><code class="objc">            assertionFailure("Incorrect item index.")</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="missed">
<td class="num">184</td>
<td class="src"><pre><code class="objc">            return</code></pre></td>
<td class="coverage">!</td>
</tr>
<tr class="never">
<td class="num">185</td>
<td class="src"><pre><code class="objc">        }</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">186</td>
<td class="src"><pre><code class="objc">        items.remove(at: index)</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">187</td>
<td class="src"><pre><code class="objc">    }</code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">188</td>
<td class="src"><pre><code class="objc"></code></pre></td>
<td class="coverage"></td>
</tr>
<tr class="never">
<td class="num">189</td>
<td class="src"><pre><code class="objc">}</code></pre></td>
<td class="coverage"></td>
</tr>
</table>
</div></div>
<footer><div class="row">
<p><a href="https://github.com/SlatherOrg/slather">Fork me on Github</a></p>
<p>&copy; 2023 Slather</p>
</div></footer><script src="highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script>
</body>
</html>
